/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto.web;

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import proyecto.dao.*;
import proyecto.modelo.Area;
import proyecto.modelo.Cargo;
import proyecto.modelo.Empleado;

/** 
 *
 * @author Administrador
 */
public class empleadoController extends MultiActionController {


    private EmpleadoDAO2 empleadoDAO;
    private CargoDAO2 cargoDAO;
    public empleadoController() {
        //Initialize controller properties here or 
        //in the Web Application Context
        //setCommandClass(MyCommand.class);
        //setCommandName("MyCommandName");
        //setSuccessView("successView");
        //setFormView("formView");

        this.cargoDAO = new CargoDAO2();
    }

    //@Override
    protected void doSubmitAction(Object command) throws Exception {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    //Use onSubmit instead of doSubmitAction 
    //when you need access to the Request, Response, or BindException objects
    /*
    @Override
    protected ModelAndView onSubmit(
    HttpServletRequest request,
    HttpServletResponse response,
    Object command,
    BindException errors) throws Exception {
    ModelAndView mv = new ModelAndView(getSuccessView());
    //Do something...
    return mv;
    }
     */

    public EmpleadoDAO2 getEmpleadoDAO() {
        return empleadoDAO;
    }

    public void setEmpleadoDAO(EmpleadoDAO2 empleadoDAO) {
        this.empleadoDAO = empleadoDAO;
    }
    

    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
        return new ModelAndView("/MantenimientoEmpleado");
    }

    public ModelAndView doLimpiar(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("doLimpiar...");

        try {
            PrintWriter out = response.getWriter();
            out.println("Se limpi&oacute; correctamente");
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(empleadoController.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
        return null;
    }

    public ModelAndView doInsertar(HttpServletRequest request, HttpServletResponse response) throws ParseException {
        System.out.println("doInsertar...");

        //Captura las variables pasadas a traves del objeto HttpServletRequest
        String codigo = request.getParameter("codigo");
        String nombre = request.getParameter("nombre");
        String apPaterno = request.getParameter("apPaterno");
        String apMaterno = request.getParameter("apMaterno");
        Double sueldo = Double.parseDouble(request.getParameter("sueldo"));
        String clave = request.getParameter("clave");
        char sexo = request.getParameter("sexo").charAt(0);

        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        //Date fechaNac = df.parse(request.getParameter("fechaNac"));
        //Date fechaIng = df.parse(request.getParameter("fechaIng"));

        int codArea = Integer.parseInt(request.getParameter("area"));
        Area area = new Area();

        int codCargo = Integer.parseInt(request.getParameter("cargo"));
        Cargo cargo = cargoDAO.buscarCargo(codCargo);
        

        //Verifica que el codigo no exista
        Empleado empleadoBuscar = empleadoDAO.buscarEmpleado(codigo);

        //Si el codigo no existe entonces inserta el nuevo registro
        if (empleadoBuscar == null) {
            Empleado empleado = new Empleado();
            empleado.setEmp_Codigo(codigo);
            empleado.setEmp_Nombre(nombre);
            empleado.setEmp_ApellidoPaterno(apPaterno);
            empleado.setEmp_ApellidoMaterno(apMaterno);
            //empleado.setEmp_FechaNacimiento(fechaNac);
            //empleado.setEmp_FechaIngreso(fechaIng);
            empleado.setEmp_Sueldo(sueldo);
            empleado.setEmp_Contrasena(clave);
            //empleado.setEmp_Sexo(sexo);
            
            empleado.setArea(area);
            empleado.setCargo(cargo);

            empleadoDAO.insertar(empleado);
        }

        //Construye una tabla con los datos de la lista
        String tabla = doLLenarTabla(empleadoDAO.listar());

        try {
            PrintWriter out = response.getWriter();
            out.println(tabla);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(empleadoController.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
        return null;
    }

    public ModelAndView doInsertar2(HttpServletRequest request, HttpServletResponse response) throws ParseException {
        System.out.println("doInsertar2...");

        //Captura las variables pasadas a traves del objeto HttpServletRequest
        String codigo = request.getParameter("codigo");
        String nombre = request.getParameter("nombre");
        String apPaterno = request.getParameter("apPaterno");
        String apMaterno = request.getParameter("apMaterno");
        Double sueldo = Double.parseDouble(request.getParameter("sueldo"));
        String clave = request.getParameter("clave");
        char sexo = request.getParameter("sexo").charAt(0);

        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        //Date fechaNac = df.parse(request.getParameter("fechaNac"));
        //Date fechaIng = df.parse(request.getParameter("fechaIng"));

        int codArea = Integer.parseInt(request.getParameter("area"));
        Area area = new Area();

        int codCargo = Integer.parseInt(request.getParameter("cargo"));
        Cargo cargo = cargoDAO.buscarCargo(codCargo);

        //Verifica que el codigo exista
        Empleado empleadoBuscar = empleadoDAO.buscarEmpleado(codigo);

        //Si el codigo no existe entonces edita el registro
        if (empleadoBuscar != null) {

            empleadoBuscar.setEmp_Nombre(nombre);
            empleadoBuscar.setEmp_ApellidoPaterno(apPaterno);
            empleadoBuscar.setEmp_ApellidoMaterno(apMaterno);
            //empleadoBuscar.setEmp_FechaNacimiento(fechaNac);
            //empleadoBuscar.setEmp_FechaIngreso(fechaIng);
            empleadoBuscar.setEmp_Sueldo(sueldo);
            empleadoBuscar.setEmp_Contrasena(clave);
            //empleadoBuscar.setEmp_Sexo(sexo);

            empleadoBuscar.setArea(area);
            empleadoBuscar.setCargo(cargo);


        }

        //Construye una tabla con los datos de la lista
        String tabla = doLLenarTabla(empleadoDAO.listar());

        try {
            PrintWriter out = response.getWriter();
            out.println(tabla);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(empleadoController.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
        return null;
    }

    public ModelAndView doEditar(HttpServletRequest request, HttpServletResponse response) throws ParseException {
        System.out.println("doEditar...");

        //Captura las variables pasadas a traves del objeto HttpServletRequest
        String codigo = request.getParameter("codigo");

        //Verifica que el codigo no exista
        Empleado empleadoBuscar = empleadoDAO.buscarEmpleado(codigo);

        //Construye el objeto JSON  a partir del objeto recuperado
        Gson gson = new GsonBuilder().setPrettyPrinting().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
        ArrayList complejo = new ArrayList(0);
        complejo.add(empleadoBuscar);
        String complex = gson.toJson(complejo);

        try {
            PrintWriter out = response.getWriter();
            out.println(complex);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(empleadoController.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
        return null;
    }

    public ModelAndView doEliminar(HttpServletRequest request, HttpServletResponse response) {
        System.out.println("doEliminar...");

        //Captura las variables pasadas a traves del objeto HttpServletRequest
        String codigo = request.getParameter("codigo");

        //Trae el objeto a eliminar
        Empleado empleadoBuscar = empleadoDAO.buscarEmpleado(codigo);

        //Elimina el objeto
        empleadoDAO.eliminar(empleadoBuscar);

        String tabla = doLLenarTabla(empleadoDAO.listar());

        try {
            PrintWriter out = response.getWriter();
            out.println(tabla);
            out.close();
        } catch (IOException ex) {
            Logger.getLogger(empleadoController.class.getName()).log(Level.SEVERE,
                    null, ex);
        }
        return null;
    }

    private String doLLenarTabla(Collection<Empleado> empleados) {

        String codigo = "";
        String nombre = "";
        String apPaterno = "";
        String apMaterno = "";
        String cargo = "";

        String cabecera = "<table class='datos'>" +
                "<tr class='Estilo9 Estilo12'>" +
                "<th>C&oacute;digo</th>" +
                "<th>Nombres</th>" +
                "<th>Ap. Paterno</th>" +
                "<th>Ap. Materno</th>" +
                "<th>Cargo</th>" +
                "<th>&nbsp;</th>" +
                "<th>&nbsp;</th></tr>";
        
        String celdas = "";

        for (Empleado e : empleados) {
            codigo = e.getEmp_Codigo();
            nombre = e.getEmp_Nombre();
            apPaterno = e.getEmp_ApellidoPaterno();
            apMaterno = e.getEmp_ApellidoMaterno();
            cargo = e.getCargo().getCar_Descripcion();
            celdas = celdas +
                    "<tr>" +
                    "<td ><span class=\"Estilo12\">" + codigo + "</span></td>" +
                    "<td ><span class=\"Estilo12\">" + nombre + "</span></td>" +
                     "<td ><span class=\"Estilo12\">" + apPaterno + "</span></td>" +
                    "<td ><span class=\"Estilo12\">" + apMaterno + "</span></td>" +
                    "<td ><span class=\"Estilo12\">" + cargo + "</span></td>" +
                    "<td><a onclick=\"return empleadoEditar('" + codigo + "');\"><img src=\"imagenes/b_edit.gif\" alt=\"Editar\" title=\"Editar\" /></a></td>" +
                    "<td><a onclick=\"return empleadoEliminar('" + codigo + "');\"><img src=\"imagenes/delete.png\" alt=\"Editar\" title=\"Editar\" /></a></td>" +
                    "</tr>";
        }
        String tabla = cabecera + celdas + "</table>";

        return tabla;
    }
}
